package fr.dauphine.bookstore.modele;

import javax.persistence.Entity;
import javax.persistence.OneToMany;
import java.util.*;

/**
 * Categorie.
 */
@Entity
public final class Category extends Persistent {

	/**
	 * Serial version UID.
	 */
	private static final long serialVersionUID = 8163084722704821767L;

	/**
	 * Titre.
	 */
	private String title;

	/**
	 * Livres.
	 */
	private List<Book> books = new ArrayList<Book>();

	// Methodes Get&Set

	/**
	 * Retourne le titre.
	 * 
	 * @return Titre
	 */
	public String getTitle() {
		return this.title;
	}

	/**
	 * Met a jour le titre.
	 * 
	 * @param title
	 *            Titre
	 */
	public void setTitle(final String title) {
		this.title = title;
	}

	/**
	 * Retourne les livres.
	 * 
	 * @return Livres
	 */
	@OneToMany(mappedBy = "category")
	public List<Book> getBooks() {
		return this.books;
	}

	/**
	 * Met a jour les livres.
	 * 
	 * @param books
	 *            Livres
	 */
	public void setBooks(final List<Book> books) {
		this.books = books;
	}

	// Methodes Add

	/**
	 * Ajoute un livre.
	 * 
	 * @param book
	 *            Livre
	 */
	public void addBook(final Book book) {
		book.setCategory(this);
		getBooks().add(book);
	}

	// Surcharges

	/**
	 * @return Titre
	 */
	public String toString() {
		return getTitle();
	}
	
	/**
	 * Teste l'egalite avec un objet quelconque.
	 * 
	 * @param that
	 *            Objet quelconque
	 * @return Vrai si l'objet that est egal a l'objet courant, faux sinon
	 */
	public boolean equals(final Object that) {
		return (that != null && that instanceof Category && equals((Category) that));
	}
}
